RulesetWorkflow
_*This is a design document for a work in progress. It describes features that do not exist today and may never exist*_ Text Description * The user of OrderRequest queue fill in a numeric "CF", called "Price". * On creation, it needs to create following approvals: ** "ManagerApproval" if CF.Price is > 1000 ** "PresidentApproval" if CF.Price is > 2000 * When all of "M", "P" are resolved (or if there were none to begin with), Create "FinanceApproval". * If any approvals above is rejected, reject the original ticket. * If "FinanceApproval" is resolved, resolve original ticket. * If "FinanceApproval" is rejected, create an approval for "CEOApproval". * If "CEOApproval" is resolved, resolve the original ticket. * If "CEOApproval" is rejected, reject the original ticket. ASCII Diagram ,----------. ,---------------------->DONE | \ / ^ FLOW-+-?---->M---->F | | | / \ | `-?->P-+-' `-(!)->C-----------------' | | | | | `-(!)---------->FAIL | | ^ `-(!)----------------------------------' Objects Note that "Scrips" are now called "Rules". (Audrey says that LockRuleset is needed, "to register dependency.") RuleAction "AquireMyLocks" FOREACH $Scrip IN $TicketObj->Scrips WHERE $Scrip.Action.Type "TryCreateTicketWithRuleset" DO LockRuleset $Scrip.Action.Argument RuleAction "TryCreateTicketWithRuleset" DO ReleaseMyLockOnRuleset $Argument UNLESS RulesetLocked $Argument DO CreateTicketWithRuleset $Argument GlobalRule "AquireLocks" * AppliesTo: All Objects * Condition: OnCreate * Action: AquireMyLocks Queue "OrderRequest" * Rule: ** Condition: OnCreate ** Action: SetTicketRuleSet "PurchaseFlow" ** Action: RunTicketRuleSet "PurchaseFlow" RuleSet "PurchaseFlow" * Rule (implicitly run by AcquireMyLocks): ** Condition: OnCreate ** Action: LockRuleSet "ManagerApproval" ** Action: LockRuleSet "PresidentApproval" ** Action: LockRuleSet "FinanceApproval" * Rule: ** Condition: OnCreate ** Condition: CF.Price > 1000 ** Action: TryCreateTicketWithRuleset "Manager" * Rule: ** Condition: OnCreate ** Condition: CF.Price > 2000 ** Action: TryCreateTicketWithRuleset "President" * Rule: ** Condition: OnCreate ** Condition: "Finance" is not blocked ** Action: TryCreateTicketWithRuleset "Finance" * Rule: ** Condition: OnReject ** Action: DeleteTree RuleSet: "ManagerApproval" * Rule (implicitly run by AcquireMyLocks): ** Condition: OnCreate ** Action: LockRuleSet "FinanceApproval" * Rule: ** Condition: OnResolve ** Action: TryCreateTicketWithRuleset "FinanceApproval" * Rule: ** Condition: OnReject ** Action: RejectTicket "PurchaseFlow" RuleSet: "PresidentApproval" * Rule (implicitly run by AcquireMyLocks): ** Condition: OnCreate ** Action: LockRuleSet "FinanceApproval" * Rule: ** Condition: OnResolve ** Action: TryCreateTicketWithRuleset "FinanceApproval" * Rule: ** Condition: OnReject ** Action: RejectTicket "PurchaseFlow" RuleSet: "FinanceApproval" * Rule: ** Condition: OnResolve ** Action: ResolveTicket "PurchaseFlow" * Rule: ** Condition: OnReject ** Action: ForceCreateTicketWithRuleset "CEOApproval" RuleSet: "CEOApproval" * Rule: ** Condition: OnResolve ** Action: ResolveTicket "PurchaseFlow" * Rule: ** Condition: OnReject ** Action: RejectTicket "PurchaseFlow" Another Text Description * I have a MonitoredQueue that sets tickets to "Monitored" if its subject matches /monitored/. * I want to have a kind of Ticket that are 'Monitored'. * I want all monitored tickets, when they are overdue for 14 days, to: ** Send notification to manager ** Mark as stalled * I want all monitored tickets, when they are overdue for 28 days, to: ** Mark as rejected * I want to query all tickets that are monitored as such * I want to modify 14 => 15 and have it affect all existing tickets that are monitored * I want to add a new "overdue for 27 days, add a 'ultimatum' correspondence to it" rule ** For all monitored tickets. * I want to add a new "overdue for 27 days, add a 'ultimatum' correspondence to it" rule ** For all new monitored tickets. ** Without affecting existing ones.